從本章節開始,將依照技術指標的類型或方向來進行分類,並在之後一一分享,內容將著重於介紹技術指標的用處以及視覺化的呈現,必須強調的是,技術分析理論並非無懈可擊,也因此不能作為投資的唯一依據,應廣泛參考不同類型的分析方法,選擇自己最熟悉的操作模式,並於投資前審慎考量,來避免落入賠錢的窘境當中
本章節的Google Colab筆記本連結:https://colab.research.google.com/drive/1GtXBxm0KSmcolr2C3VG9a9ppVLPmPah8?usp=sharing
前情提要【EP.1 部署股票搜尋器,獲取上市櫃股票資訊】
本章節作為這系列技術分析文章的開端,首先介紹的就是投資人很常使用的移動平均線,也就是俗稱的均線,能夠作為投資人分析股市趨勢、進出場時機以及交易策略的判斷依據,例如:短週期均線向上超越長週期均線時,常被視為多方訊號;短週期均線向下穿越長週期均線時,常被視為空方訊號,因此本節將整理四種類型的均線如下表,並分享相關的應用方式。
均線名稱 | 計算方式 |
---|---|
簡單移動平均線 (SMA) | 直接計算收盤價的算術平均值 |
指數移動平均線 (EMA) | 利用當前收盤價與前一根K線進行計算,呈現指數型遞減,以指數平滑方式更新當前的EMA值 |
加權移動平均線 (WMA) | 給予個別天數不同的權重進行計算,呈現線型遞減,計算最終收盤價的WMA值 |
考夫曼自適應移動平均線(KAMA) | 以當期收盤價格與前一期KAMA進行計算,結合價格軌跡效率與迭代運算 |
由於Ta-lib並非Python的官方套件,因此需額外進行安裝作業,這邊提供的是Colab的安裝方式,其餘的安裝指南可至開發者網頁查看
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
!tar -xzvf ta-lib-0.4.0-src.tar.gz
%cd ta-lib
!./configure --prefix=/usr
!make
!make install
!pip install Ta-Lib
Ta-lib的API串接共有兩種,且呼叫方式與輸入值不同,需要特別注意
from talib.abstract import *
import talib
mplfinance 是專門用於金融數據的可視化分析的套件,其中有各種彈性化的設定,有機會的話之後會另外撰寫一篇文章,詳細說明mplfinance各式各樣的功能與使用方式
!pip install mplfinance
我們以mplfinance為繪圖核心,設置一個chart()
的類別,以便後續進行圖表的可視化操作
# 繪製圖表
class chart():
#建構式
def __init__(self,K_line):
self.K_line = K_line #K線資料
self.axlist = [] #子圖列表
#方法
def TA(self,data,panel,type='',marker='.',color=''):
ax = mpf.make_addplot(data, panel=panel, type=type, marker=marker, color=color)
self.axlist.append(ax)
def Show(self):
color_set = mpf.make_marketcolors(up='red',down='green',
edge='inherit',
wick='inherit',
volume='inherit',)
style_set = mpf.make_mpf_style(marketcolors=color_set,
figcolor='(0.82, 0.83, 0.85)',
gridcolor='(0.82, 0.83, 0.85)',)
mpf.plot(self.K_line,
type='hollow_and_filled',
style=style_set,
volume=True,
addplot=self.axlist,
update_width_config=dict(line_width=0.7,candle_width = 0.8),
figsize=(20, 8))
本次分析以2022-07-01~2022-12-30的台積電為例,首先將全部欄位名稱轉為小寫,接著將表格內的date設置為index,並替換部分欄位的名稱,以符合Ta-lib套件的設定
data.columns=[ i.lower() for i in data.columns ]
data.index = pd.DatetimeIndex(data['date'])
data.rename(columns = {'max':'high', 'min':'low','trading_volume':'volume'}, inplace = True)
簡單移動平均線,是由各收盤價的平均值直接計算而成,沒有添加權重的概念,使用函數SMA(資料,時間週期)
,協助計算簡單移動平均的數值,其中的時間週期可自由設定,例如5日、10日、20日等,並將計算結果存入變數當中,接著使用chart()
類別與其中的方法,分別添加資料與sma_5
、sma_20
兩項指標變數,透過Show()
繪製含有指標的K線圖
sma_5=SMA(data,timeperiod=5)
sma_20=SMA(data,timeperiod=20)
fin_chart = chart(data)
fin_chart.TA(sma_5,panel=0,type="line",color="black")
fin_chart.TA(sma_20,panel=0,type="line",color="blue")
fin_chart.Show()
指數移動平均線,會依據K線的距離時程給予不同的的權重,越接近當天的權重越高,因此相較於SMA,更能反映出近期的股價走勢,當行情出現反轉情勢,EMA的反應速度會比SMA來的更快,使用函數EMA(資料,時間週期)
ema_5=EMA(data,timeperiod=5)
ema_20=EMA(data,timeperiod=20)
fin_chart = chart(data)
fin_chart.TA(ema_5,panel=0,type="line",color="orange")
fin_chart.TA(ema_20,panel=0,type="line",color="gray")
fin_chart.Show()
加權移動平均線,會依據K線的距離時程給予不同的的權重,越近期的權重越高,與EMA不同的是,WMA呈現線性遞減,EMA為指數遞減,使用函數WMA(資料,時間週期)
wma_5=WMA(data,timeperiod=5)
wma_20=WMA(data,timeperiod=20)
fin_chart = chart(data)
fin_chart.TA(wma_5,panel=0,type="line",color="Brown")
fin_chart.TA(wma_20,panel=0,type="line",color="blue")
fin_chart.Show()
考夫曼自適應移動平均線,由當期收盤價與前一期KAMA計算而成,與EMA計算方式類似,區別在於KAMA的權重值會受到效率比的影響而浮動,所謂的效率比是用來衡量均線的變化態勢,越接近1表示越平滑,代表明顯的多或空頭走勢;反之則代表曲折,呈現劇烈的盤整波動現象,使用函數KAMA(資料,時間週期)
kama_5=KAMA(data,timeperiod=5)
kama_20=KAMA(data,timeperiod=20)
fin_chart = chart(data)
fin_chart.TA(kama_5,panel=0,type="line",color="purple")
fin_chart.TA(kama_20,panel=0,type="line",color="red")
fin_chart.Show()